package common

import (
	"code.huawei.com/tdc-sdk/mgmt"
	"time"
)

type Category struct {
	CategoryId   int    `json:"categoryId"`
	CategoryName string `json:"categoryName"`
}
type Asset struct {
	CollectionIndex    string    `json:"collectionIndex"`
	SubCollectionIndex int       `json:"subCollectionIndex"`
	AssetId            string    `json:"assetId"`
	TokenId            string    `json:"tokenId"`
	PictureUrl         string    `json:"pictureUrl"`
	Category           *Category `json:"category"`
}

type AssetDetailInfo struct {
	CollectionIndex    string  `json:"collectionIndex"`
	SubCollectionIndex int     `json:"subCollectionIndex"`
	TokenId            string  `json:"tokenId"`
	Supplies           int     `json:"supplies"`
	CollectionName     string  `json:"collectionName"`
	AssetId            string  `json:"assetId"`
	Url                string  `json:"Url"`
	Description        string  `json:"description"`
	Category           string  `json:"category"`
	Name               string  `json:"name"`
	Issuer             string  `json:"issuer"`
	Currency           string  `json:"currency"`
	Price              float64 `json:"price"`
}

type BlockSummary struct {
	Blocks    string    `json:"blocks"`
	Txs       string    `json:"txs"`
	StartTime time.Time `json:"StartTime"`
}

type Transaction struct {
	BlockID string `json:"block_id"`
	TxId    string `json:"tx_id"`
	Time    string `json:"time"`
}

type AssetDetail struct {
	Owner   string `json:"owner"`
	Time    string `json:"time"`
	TxId    string `json:"tx_id"`
	BlockId string `json:"block_id"`
}

// UserInfo 通过网关获取的两个id只使用了一个
type UserInfo struct {
	Uid string `json:"uid"`
}

type User struct {
	UserId        int    `json:"id"`
	UserName      string `json:"userName"`
	Locked        bool   `json:"locked"`
	Role          string `json:"role"`
	Authenticated bool   `json:"authenticated"`
}

type AssetGallery struct {
	Collection string `json:"collection"`
	Id         string `json:"id"`
	PictureUrl string `json:"pictureUrl"`
	Owner      string `json:"owner"`
	Time       string `json:"time"`
}

type SubCollectionDetail struct {
	Name        string  `json:"name"`
	SubSupplies int     `json:"subSupplies"`
	Url         string  `json:"url"`
	Description string  `json:"description"`
	Currency    string  `json:"currency"`
	Price       float64 `json:"price"`
}

//name为图片名称
type CollectionDetail struct {
	CollectionIndex    string  `json:"collectionIndex"`
	SubCollectionIndex int     `json:"subCollectionIndex"`
	CollectionName     string  `json:"collectionName"`
	CollectionStatus   int     `json:"collectionStatus"`
	Supplies           int     `json:"supplies"`
	Counters           int     `json:"counters"`
	Favorite           int     `json:"favorite"`
	SaleTime           int64   `json:"saleTime"`
	OffShelfTime       int64   `json:"offShelfTime"`
	Currency           string  `json:"currency"`
	Price              float64 `json:"price"`
	CoverUrl           string  `json:"coverUrl"`
	Name               string  `json:"name"`
}
type SubCollectionAll struct {
	SubCollections    []CollectionDetail `json:"subCollections"`
	SubCollectionSize int                `json:"subCollectionSize"`
}

type CollectionDetailAll struct {
	Collections    []SubCollectionAll `json:"collections"`
	CollectionSize int                `json:"collectionSize"`
	TotalNum       int                `json:"totalNum"`
}

type MintResponse struct {
	TxId     string   `json:"txId"`
	TokenURI mgmt.NFT `json:"tokenURI"`
}

type MintOrBurnResponse struct {
	TxId string `json:"txId"`
}

type CollectionOnChainResponse struct {
	CollectionIndexes []string `json:"collectionIndexes"`
	CollectionNum     int      `json:"collectionNum"`
}

type CollectionNameForShow struct {
	CollectionIndex string `json:"collectionIndex"`
	CollectionName  string `json:"collectionName"`
}
type CollectionNames struct {
	Collection     []CollectionNameForShow `json:"collection"`
	CollectionSize int                     `json:"collectionSize"`
}

type LoginResp struct {
	UserName      string `json:"userName"`
	UserId        int    `json:"userId"`
	Role          string `json:"role"`
	PwdChanged    bool   `json:"pwdChanged"`
	Authenticated bool   `json:"authenticated"`
}

type Profile struct {
	Name            string `json:"userName"`
	Address         string `json:"address"`
	CreatedTime     int64  `json:"createdTime"`
	Authenticated   bool   `json:"authenticated"`
	RegPhoneNum     string `json:"regPhoneNum"`
	ProfilePhotoUrl string `json:"profilePhotoUrl"`
}

type CheckPhoneRegResp struct {
	PhoneReg bool `json:"phoneReg"`
}

type UserList struct {
	PageNum      int     `json:"PageNum"`
	PageSize     int     `json:"pageSize"`
	TotalPageNum int     `json:"totalPageNum"`
	TotalNum     int     `json:"totalNum"`
	UserList     []*User `json:"userLists"`
}

type ApplyAssetResponse struct {
	TxId    string `json:"TxId"`
	Result  string `json:"Result"`
	CodeUrl string `json:"CodeUrl"`
}

type ApplyAssetErrorResponse struct {
	IdentityVerification bool `json:"Identity_Verification"`
	HaveLogin            bool `json:"Have_login"`
}

type FileResponse struct {
	ObsKey string `json:"obsKey"`
}

type FileUrlResponse struct {
	FileUrl string `json:"FileUrl"`
}

type BlockChainTypeResponse struct {
	Type string `json:"type"`
}

type AssetAllResponse struct {
	Assets   []Asset `json:"assets"`
	TotalNum int     `json:"totalNum"`
}

type CollectionDetailForHomePage struct {
	CollectionIndex    string  `json:"collectionIndex"`
	SubCollectionIndex int     `json:"subCollectionIndex"`
	Supplies           int     `json:"supplies"`
	Remain             int     `json:"remain"`
	CollectionName     string  `json:"collectionName"`
	PictureName        string  `json:"pictureName"`
	CollectionStatus   int     `json:"collectionStatus"`
	AssetUrl           string  `json:"url"`
	Description        string  `json:"description"`
	Favorite           int     `json:"favorite"`
	SaleTime           int64   `json:"saleTime"`
	OffShelfTime       int64   `json:"offShelfTime"`
	Currency           string  `json:"currency"`
	Price              float64 `json:"price"`
	Issuer             string  `json:"issuer"`
}
type CollectionDetailHomePage struct {
	Collection     []CollectionDetailForHomePage `json:"collection"`
	CollectionSize int                           `json:"collectionSize"`
	TotalNum       int                           `json:"totalNum"`
}

type CollectionDetailForRecommend struct {
	CollectionIndex    string `json:"collectionIndex"`
	SubCollectionIndex int    `json:"subCollectionIndex"`
	Supplies           int    `json:"supplies"`
	Remain             int    `json:"remain"`
	CollectionName     string `json:"collectionName"`
	PictureName        string `json:"pictureName"`
	CollectionStatus   int    `json:"collectionStatus"`
	AssetUrl           string `json:"url"`
	Description        string `json:"description"`
	Issuer             string `json:"issuer"`
}

type CollectionDetailRecommend struct {
	Collection     []CollectionDetailForRecommend `json:"collection"`
	CollectionSize int                            `json:"collectionSize"`
	TotalNum       int                            `json:"totalNum"`
}

type RealNameAuthenticationResp struct {
	Name               string `json:"userName"`
	VerificationCode   string `json:"verificationName"`
	VerificationResult string `json:"verificationID"`
	VerificationMsg    string `json:"verificationMsg"`
}

type CollectionDetailForPublish struct {
	AssetUrl    string `json:"url"`
	Description string `json:"description"`
	Category    string `json:"category"`
	Name        string `json:"name"`
}
type CollectionDetailPublish struct {
	CollectionIndex    string                     `json:"collectionIndex"`
	SubCollectionIndex int                        `json:"subCollectionIndex"`
	Supplies           int                        `json:"supplies"`
	CollectionName     string                     `json:"collectionName"`
	Detail             CollectionDetailForPublish `json:"detail"`
	Issuer             string                     `json:"issuer"`
	SaleTime           int64                      `json:"saleTime"`
	OffShelfTime       int64                      `json:"offShelfTime"`
	Currency           string                     `json:"currency"`
	Price              float64                    `json:"price"`
}
type CollectionDetailPublishResponse struct {
	CollectionsInfo []CollectionDetailPublish `json:"collectionsInfo"`
	Size            int                       `json:"size"`
}
type OrderInfo struct {
	UserId             string  `json:"userId"`
	UserName           string  `json:"userName"`
	OrderId            string  `json:"orderId"`
	ThirdPartyId       string  `json:"thirdPartyId"`
	CollectionIndex    string  `json:"collectionIndex"`
	SubCollectionIndex int     `json:"subCollectionIndex"`
	AssetUrl           string  `json:"assetUrl"`
	CollectionName     string  `json:"collectionName"`
	PictureName        string  `json:"pictureName"`
	Issuer             string  `json:"issuer"`
	TokenId            string  `json:"tokenId"`
	AssetId            string  `json:"assetId"`
	OrderStatus        string  `json:"orderStatus"`
	CreatedTime        int64   `json:"createdTime"`
	ExpireTime         int64   `json:"expireTime"`
	PaymentTime        int64   `json:"paymentTime"`
	Price              float64 `json:"price"`
}

type OrderInfoForQuery struct {
	Order     []OrderInfo `json:"order"`
	OrderSize int         `json:"orderSize"`
	TotalNum  int         `json:"totalNum"`
}

type PaymentInfo struct {
	CodeUrl string `json:"codeUrl"`
}

type OrderResponse struct {
	OrderId         string  `json:"orderId"`
	CollectionIndex string  `json:"collectionIndex"`
	TokenId         string  `json:"tokenId"`
	OrderStatus     string  `json:"orderStatus"`
	CreatedTime     int64   `json:"createdTime"`
	ExpiredTime     int64   `json:"expireTime"`
	Currency        string  `json:"currency"`
	Price           float64 `json:"price"`
}

type WebSocketLiveMessage struct {
	Message string `json:"message"`
}

type PhoneVerifyResp struct {
	CooldownTime int64 `json:"cooldownTime"`
}

type RegistrationResp struct {
	UserName    string `json:"userName"`
	PhoneNumber string `json:"phoneNumber"`
}

type BurnAssetResp struct {
	Message string `json:"message"`
}

type GetProfilePhoto struct {
	ProfilePhotoUrl string `json:"FileUrl"`
}
